/*
 * @Author: WJC
 * @Date: 2018-11-27 14:04:03
 * @Last Modified by: WJC
 * @Last Modified time: 2018-12-04 14:50:53
 */

// 声明全局变量
var regInoInput; // "挂号发票号"输入框
var caseNoInput; // "病例号"输入框
var pidInput; // "身份证号"输入框
var pnameInput; // "姓名"输入框
var sexInput; // "性别"输入框
var ageInput; // "年龄"输入框
var birthdayInput; // "出生日期"
var addressInput; // "地址"输入框
var settleTypeInput; // "结算类别"输入框
var mcardNoInput; // "医疗证号"输入框
var medicalTypeInput; // "医疗类别"输入框
var getRegInoInput; // 根据挂号信息得到的"发票号"输入框
var changeAllCheckBox; // 挂号发票表格的复选框
var regTbody; // "挂号信息"表格主体
var invTbody; // "发票明细"表格

/**
 * 获取全局变量
 */
function getGlobalVariable() {
  regInoInput = $('input[name="reg_ino"]');
  caseNoInput = $('input[name="case_no"]');
  pidInput = $('input[name="pid"]');
  pnameInput = $('input[name="pname"]');
  sexInput = $('input[name="sex"]');
  ageInput = $('input[name="age"]');
  birthdayInput = $('input[name="birthday"]');
  addressInput = $('input[name="address"]');
  settleTypeInput = $('input[name="settle_type"]');
  mcardNoInput = $('input[name="mcard_no"]');
  medicalTypeInput = $('input[name="medical_type"]');
  getRegInoInput = $('input[name="get_reg_ino"]');
  changeAllCheckBox = $("input[name='change_all']");
  regTbody = $(".reg_tbody");
  invTbody = $(".inv_tbody");
}

/**
 * 将不足10位的数值，转换为长度为10的字符串
 * @param {number} num
 */
function getTenStr(num) {
  // 将num转换成字符串，根据字符串长度获得正确的数值位数
  var str = num + "";
  var len = str.length;
  // 根据字符串长度进行位数补全，补全到10位，不足位添0
  if (len < 10) {
    for (var i = 0; i < 10 - len; i++) {
      str = "0" + str;
    }
  }
  return str;
}

/**
 * 获得当前可用的最新挂号发票号，并为"挂号发票号"输入框的value属性赋值
 */
function getRegIno() {
  // 通过AJAX获得数据
  $.ajax({
    url: "getRequiredRegIno.do",
    type: "post",
    async: true,
    error: function () {
      alert("挂号发票号的ajax请求失败");
    },
    success: function (data) {
      // 1、将获得的data数据转换成数值类型num
      var num = parseInt(data);
      // 2、如果num的值为-1，表示发票号超出范围，弹出警告，并结束函数
      if (num === -1) {
        alert("挂号发票号溢出，请联系技术人员");
        return;
      }
      // 3、将不足10位的数值，转换为长度为10的字符串
      var str = getTenStr(num);

      // 为"挂号发票号"输入框的value属性赋值
      regInoInput.val(str);
    }
  });
}

/**
 * 传入name为pid的input输入值，通过该输入值获取服务器端的对应"挂号"信息
 * @param {string} pidValue
 */
function queryIdCardInfoByPid(pidValue, page) {
  // 当pid的值为空字符串时不执行函数
  if (pidValue === "") {
    return;
  }

  // 通过AJAX获得数据
  $.ajax({
    url: "getRegisterListByIdCard.do",
    type: "post",
    async: true,
    data: {
      pid: pidValue,
      pagenum: page
    },
    dataType: "text",
    error: function () {
      alert("身份证号的ajax请求失败");
    },
    success: function (data) {
      // num的值为-1时，表示数据库中该记录不存在
      var num = parseInt(data);
      if (num !== -1) {
        var json = eval("(" + data + ")"); // string->json

        $(".maxpage").html(json.maxpage);
        regTbody.empty(); // 清空"挂号表"
        invTbody.empty(); // 清空"明细号表"

        var lists = json.lists;
        for (var i = 0; i < lists.length; i++) {
          var arr = lists[i];
          addTrIntoTableForRegister(
            arr[0],
            arr[1],
            arr[2],
            arr[3],
            arr[4],
            arr[5],
            arr[6],
            arr[7],
            arr[8],
            arr[9],
            arr[10],
            arr[11],
            arr[12],
            arr[13],
            arr[15],
            arr[16]
          );
        }

        pnameInput.val(lists[0][1]); // 添加"姓名"
        birthdayInput.val(lists[0][3]); // 添加"出生日期"
        getAgeByBirthday(); // 取得相应年龄
        pidInput.val(lists[0][4]); // 添加"身份证号"

        if (parseInt(lists[0][2]) === 1) {
          sexInput.val("男"); // 添加"性别"
        } else {
          sexInput.val("女"); // 添加"性别"
        }

        if (lists[0][14] !== "null" && lists[0][14] !== "") {
          // 在地址存在时，向"地址"输入框添加值;
          addressInput.val(lists[0][14]);
        } else {
          // 在地址不存在时，向"地址"输入框添加空字符串，消除上一次记录残留
          addressInput.val("");
        }
      } else {
        // 消除上一次残留记录
        pnameInput.val("");
        sexInput.val("");
        birthdayInput.val("");
        addressInput.val("");
        ageInput.val("");
        $(pidInput.get(1)).val("");
      }
    }
  });
}

/**
 * 根据"出生日期"获得相应的"年龄"
 */
function getAgeByBirthday() {
  // 获得"出生日期"输入框的值，格式为"yyyy-MM-dd"
  var birth = birthdayInput.val();
  // 对获得的"出生日期"字符串进行拆分，得到年、月、日的字符串
  var _year = birth.substring(0, birth.indexOf("-"));
  var _month = birth.substring(birth.indexOf("-") + 1, birth.lastIndexOf("-"));
  var _date = birth.substring(birth.lastIndexOf("-") + 1, birth.length);
  // 将年、月、日的字符串转换为相应的数值
  var y = parseInt(_year);
  var m = parseInt(_month) - 1;
  var d = parseInt(_date);
  // 获得"出生日期"的时间戳
  var birthTime = new Date(y, m, d).getTime();
  // 获得当前时间的时间戳
  var nowTime = new Date().getTime();
  // 计算出相差的时间
  var c = nowTime - birthTime;

  var age = Math.floor(c / (365 * 24 * 60 * 60 * 1000));
  if (age < 1) {
    age = Math.floor(c / (30 * 24 * 60 * 60 * 1000));
    ageInput.val(age + "月");

    if (age < 1) {
      age = Math.floor(c / (24 * 60 * 60 * 1000));
      ageInput.val(age + "天");
    }
  }
  // 为"年龄"输入框赋值
  ageInput.val(age + "岁");

  console.log(_year + "、" + _month + "、" + _date);
}

/**
 * 向挂号显示表格中添加一行，只显示添加的10行
 * @param {*} case_no
 * @param {*} pname
 * @param {*} sex
 * @param {*} birthday
 * @param {*} pid
 * @param {*} reg_ino
 * @param {*} settle_type
 * @param {*} drlevel
 * @param {*} reg_date
 * @param {*} vist_date
 * @param {*} diag_status
 * @param {*} reg_status
 * @param {*} reg_pay
 * @param {*} department
 * @param {*} mcard_no
 * @param {*} medical_type
 */
function addTrIntoTableForRegister(
  case_no,
  pname,
  sex,
  birthday,
  pid,
  reg_ino,
  settle_type,
  drlevel,
  reg_date,
  vist_date,
  diag_status,
  reg_status,
  reg_pay,
  department,
  mcard_no,
  medical_type
) {
  // if ($(".reg_tbody tr").length === 10) {
  //   // 当添加到第11行时，删除最后一行行
  //   $(".reg_tbody tr").remove(".reg_tbody tr:last-child");
  // }

  mcard_no = mcard_no == 0 ? "" : mcard_no;
  medical_type = medical_type == 1 ? "市保" : medical_type == 2 ? "公务员" : "";

  // 添加行
  regTbody.append(
    '<tr><td><input type="radio" name="get_tr" onclick="getTrOfCheckedFromRegister();getTrForInv();clearChangeAll();" /></td><td class="case_no">' +
    getTenStr(case_no) +
    "</td><td>" +
    pname +
    "</td><td>" +
    (sex == "1" ? "男" : "女") +
    "</td><td>" +
    birthday +
    "</td><td>" +
    pid +
    '</td><td class="reg_ino">' +
    getTenStr(reg_ino) +
    '</td><td class="settle_type">' +
    settle_type +
    "</td><td>" +
    drlevel +
    "</td><td>" +
    reg_date +
    "</td><td>" +
    vist_date +
    '</td><td class="diag_status">' +
    (diag_status == "1" ? "否" : "是") +
    '</td><td class="reg_status">' +
    (reg_status == "1" ? "正常" : "已退号") +
    '</td><td class="reg_pay">' +
    reg_pay +
    "</td><td>" +
    department +
    '</td><td class="mcard_no" style="display: none">' +
    mcard_no +
    '</td><td class="medical_type" style="display: none">' +
    medical_type +
    "</td></tr>"
  );
}

/**
 * 获得挂号表格中的信息
 */
function getTrOfCheckedFromRegister() {
  var trChecked = $('input[name="get_tr"]:checked').parent().parent(); // 被选择中的单选框所在的tr元素
  caseNoInput.val(trChecked.children(".case_no").html()); // 获得"病历号"
  settleTypeInput.val(trChecked.children(".settle_type").html()); // 获得"结算类别"
  mcardNoInput.val(trChecked.children(".mcard_no").html()); // 获得"医疗证号"
  medicalTypeInput.val(trChecked.children(".medical_type").html()); // 获得"医疗类别"
  getRegInoInput.val(trChecked.children(".reg_ino").html()); // 获得"发票号"
}

/**
 * 获得挂号表格中的信息，根据其建立发票表格
 */
function getTrForInv() {
  var trChecked = $('input[name="get_tr"]:checked')
    .parent()
    .parent(); // 被选择中的单选框所在的tr元素

  // 挂号发票信息
  var reg_pay = trChecked.children(".reg_pay").html();
  $('input[name="inv_type"]').val("门诊挂号发票号");
  $('input[name="reg_pay"]').val(reg_pay);
  $('input[name="zero"]').val("0");

  // 门诊收费明细
  var diag_status = trChecked.children(".diag_status").html();
  var reg_status = trChecked.children(".reg_status").html();
  var reg_ino = trChecked.children(".reg_ino").html();
  invTbody.empty();
  invTbody.append(
    '<tr><td><input type="checkbox" name="pay_detail" onclick="checked2();" /></td><td>挂号费</td><td>' +
    diag_status +
    "</td><td class='reg_status'>" +
    reg_status +
    "</td><td>" +
    reg_pay +
    "</td><td>" +
    reg_pay +
    "</td><td>" +
    reg_pay +
    "</td><td>0</td><td>0</td><td>" +
    reg_pay +
    "</td><td>0</td><td class='reg_ino' style='display:none'>" +
    reg_ino +
    "</td></tr>"
  );
}

/**
 * 复选框的全选与去取消
 */
function checked1() {
  var ck = changeAllCheckBox.prop("checked");
  $("input[name='pay_detail']").prop("checked", ck);
}

function checked2() {
  //获得pay_detail的总数
  var total = $("input[name='pay_detail']").length;
  //获得pay_detail的选中项数量
  var ckd = $("input[name='pay_detail']:checked").length;
  //两者一致
  changeAllCheckBox.prop("checked", ckd == total);
}

function clearChangeAll() {
  changeAllCheckBox.prop("checked", false); // 重置复选框
}

/**
 * "退号"按钮功能
 */
function backRegister() {
  // 判断是否有退号记录选中
  if ($("input[name='pay_detail']:checked").length === 0) {
    alert("没有选中退号记录");
    return;
  }

  // 判断选中的挂号信息是否诊断过
  if ($("input[name='get_tr']:checked").parent().parent().children(".diag_status").text() == "是") {
    alert("已诊断，不可退号");
    return;
  }

  // 判断选中的挂号信息是否退号过
  var regStatusChecked = $("input[name='get_tr']:checked").parent().parent().children(".reg_status"); // 选中项的"挂号状态“
  if (regStatusChecked.text() == "已退号") {
    alert("已退号，不可以再次操作");
    return;
  }

  // 获得所有要退号信息的发票号
  var arr = [];
  var payDetails = $("input[name='pay_detail']:checked");
  for (var i = 0; i < payDetails.length; i++) {
    // 得到选中的复选框所在的行
    var trChecked = $(payDetails.get(i)).parent().parent();
    // 将数据添加入arr数组中
    arr.push(trChecked.children(".reg_ino").html());
  }

  console.log(arr);

  $.ajax({
    type: "post",
    url: "backRegister.do",
    data: {
      regIno: arr
    },
    dataType: "text",
    traditional: true,
    error: function () {
      alert("退号的ajax请求失败");
    },
    success: function (data) {
      var num = parseInt(data);
      if (num === 1) {
        //changeAllCheckBox.prop("checked", false); // 重置复选框
        //regTbody.empty(); // 清空"挂号表"
        //invTbody.empty(); // 清空"明细号表"
        //queryIdCardInfoByPid(pidInput.val()); // 刷新挂号信息列表
        regStatusChecked.text("已退号"); // 刷新挂号信息列表(本地)
        payDetails.parent().parent().children(".reg_status").text("已退号"); // 刷新挂号详细信息列表(本地)
        alert("退号成功");
      }
      if (num === -1) {
        alert("退号失败");
      }
    }
  });
}

/**
 * 绑定事件
 */
function bindEvent() {
  /** "身份证号"输入框绑定事件 */
  pidInput.keyup(function (e) {
    var eCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
    // 回车键的keyCode为13，按下回车后执行函数
    if (eCode === 13) {
      changeAllCheckBox.prop("checked", false); // 重置复选框
     
      queryIdCardInfoByPid(this.value, 1);
    }
  });

  // "更新发票号"按钮的绑定事件
  $(".refresh_ino").click(function () {
    getRegIno();
  });

  // "清屏"按钮的绑定事件
  $(".clear_form").click(function () {
    caseNoInput.val("");
    pidInput.val("");
    pnameInput.val("");
    sexInput.val("");
    ageInput.val("");
    birthdayInput.val("");
    settleTypeInput.val("");
    mcardNoInput.val("");
    medicalTypeInput.val("");
    addressInput.val("");
    getRegInoInput.val("");
    $('input[name="inv_type"]').val("");
    $('input[name="reg_pay"]').val("");
    $('input[name="zero"]').val("");
    regTbody.empty();
    invTbody.empty();
    changeAllCheckBox.prop("checked", false);
  });

  // 复选框绑定事件
  changeAllCheckBox.click(function () {
    checked1();
  });

  // 退费按钮的绑定事件
  $(".back_register_btn").click(function () {
    backRegister();
  });

  // 上一页
  $(".prev a").click(function () {
    var page = parseInt($(".pagenum").html()); // 当前页数

    if (page != 1) {
      $(".next").removeClass("disabled");
      queryIdCardInfoByPid(pidInput.val(), page - 1);
      $(".pagenum").html(page - 1);
    } else {
      $(".prev").addClass("disabled");
    }
    return false;
  });

  // 下一页
  $(".next a").click(function () {
    var page = parseInt($(".pagenum").html()); // 当前页数
    var maxpage = parseInt($(".maxpage").html()); // 最大页数

    if (page != maxpage) {
      $(".prev").removeClass("disabled");
      queryIdCardInfoByPid(pidInput.val(), page + 1);
      $(".pagenum").html(page + 1);
    } else {
      $(".next").addClass("disabled");
    }
    return false;
  });
}

/**
 * 在网页加载完时，执行相应的函数
 */
$(document).ready(function () {
  // 获得全局变量
  getGlobalVariable();
  // 获得当前可用的最新挂号发票号
  getRegIno();
  // 绑定事件
  bindEvent();
});